package user

// 此文件用来，定义保存到数据库中的数据

import (
	"encoding/json"

	"gitee.com/liuxiaowei123/vblog-01/vblog-01/vblog/common"
	"golang.org/x/crypto/bcrypt"
)

func NewUser(req *CreateUserRequest) *User {
	// 把用户传入的密码加密
	req.PasswordHash()

	return &User{
		Meta:              common.NewMeta(),
		CreateUserRequest: req,
	}
}

type User struct {
	// 下面这些字段其他模块的model中也会用到，所以放到common包中来引用
	// Id       int   `json:"id"`
	// CreateAt int64 `json:"create_at"`
	// UpdateAt int64 `json:"update_at"`
	// 存入数据库加入的信息
	*common.Meta
	// 用户传递过来的信息
	*CreateUserRequest
}

func (u *User) String() string {
	js, _ := json.Marshal(u)
	return string(js)
}

// 实现结构体和表的映射关系
func (u *User) TableName() string {
	return "users"
}

// 判断该用户的密码是否正确
func (u *User) CheckPassword(password string) error {
	return bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password))
}
